--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
libs/able/able/dispatcher.py master (8b8a5035) Text, 12.27 KB
Tff7b72from T7ee787typing Tff7b72import Te6edf3ListTb4b4b4, Te6edf3Optional
Tff7b72from T7ee787kivyT7ee787.T7ee787event Tff7b72import Te6edf3EventDispatcher
Tff7b72from T7ee787kivyT7ee787.T7ee787logger Tff7b72import Te6edf3Logger
Tff7b72from T7ee787able Tff7b72import Te6edf3WriteType
Tff7b72from T7ee787ableT7ee787.T7ee787adapter Tff7b72import Te6edf3AdapterManager
Tff7b72from T7ee787ableT7ee787.T7ee787filters Tff7b72import Te6edf3Filter
Tff7b72from T7ee787ableT7ee787.T7ee787permissions Tff7b72import Te6edf3DEFAULT_RUNTIME_PERMISSIONS
Tff7b72from T7ee787ableT7ee787.T7ee787queue Tff7b72import Te6edf3BLEQueueTb4b4b4, Te6edf3ble_taskTb4b4b4, Te6edf3ble_task_done
Tff7b72from T7ee787ableT7ee787.T7ee787scan_settings Tff7b72import Te6edf3ScanSettingsBuilder
Tff7b72from T7ee787ableT7ee787.T7ee787utils Tff7b72import Te6edf3force_convertible_to_java_array
Tff7b72class T56d364BLEErrorTb4b4b4:
T8b949e"""Raise Exception on attribute access"""
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3msgTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmsg Tff7b72= Te6edf3msg
Tff7b72def Tff7b72__getattr__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3nameTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ExceptionTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmsgTb4b4b4)
Tff7b72class T56d364BluetoothDispatcherBaseTb4b4b4(Te6edf3EventDispatcherTb4b4b4)Tb4b4b4:
Te6edf3__events__ Tff7b72= Tb4b4b4(
Ta5d6ff"Ta5d6ffon_deviceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_scan_startedTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_scan_completedTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_servicesTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_connection_state_changeTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_bluetooth_adapter_state_changeTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_characteristic_changedTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_characteristic_readTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_characteristic_writeTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_descriptor_readTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_descriptor_writeTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_gatt_releaseTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_errorTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_rssi_updatedTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffon_mtu_changedTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3queue_class Tff7b72= Te6edf3BLEQueue
Tff7b72def Tff7b72__init__Tb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3queue_timeoutTb4b4b4: Tffa657float Tff7b72= T79c0ff0.5Tb4b4b4,
Te6edf3enable_ble_codeTb4b4b4: Tffa657int Tff7b72= T79c0ff0xAB1ETb4b4b4,
Te6edf3runtime_permissionsTb4b4b4: Te6edf3OptionalTb4b4b4[Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4] Tff7b72= Tff7b72NoneTb4b4b4, T8b949e# DEFAULT_RUNTIME_PERMISSIONS
Tb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Te6edf3BluetoothDispatcherBaseTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffqueue_timeout Tff7b72= Te6edf3queue_timeout
Tff7b72selfTff7b72.Td2a8ffenable_ble_code Tff7b72= Te6edf3enable_ble_code
Tff7b72selfTff7b72.Td2a8ffruntime_permissions Tff7b72= Tb4b4b4[
Tffa657strTb4b4b4(Te6edf3permissionTb4b4b4)
Tff7b72for Te6edf3permission Tff7b72in Tb4b4b4(
Te6edf3runtime_permissions
Tff7b72if Te6edf3runtime_permissions Tff7b72is Tff7b72not Tff7b72None
Tff7b72else Te6edf3DEFAULT_RUNTIME_PERMISSIONS
Tb4b4b4)
Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_remote_device_address Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_set_ble_interfaceTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_set_queueTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_set_adapter_managerTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_set_ble_interfaceTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_ble Tff7b72= Te6edf3BLEErrorTb4b4b4(Ta5d6ff"Ta5d6ffBLE is not implemented for platformTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_set_queueTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffqueue Tff7b72= Tff7b72selfTff7b72.Td2a8ffqueue_classTb4b4b4(Te6edf3timeoutTff7b72=Tff7b72selfTff7b72.Td2a8ffqueue_timeoutTb4b4b4)
Tff7b72def Td2a8ff_set_adapter_managerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3AdapterManagerTb4b4b4(
Te6edf3bleTff7b72=Tff7b72selfTff7b72.Td2a8ff_bleTb4b4b4,
Te6edf3enable_ble_codeTff7b72=Tff7b72selfTff7b72.Td2a8ffenable_ble_codeTb4b4b4,
Te6edf3runtime_permissionsTff7b72=Tff7b72selfTff7b72.Td2a8ffruntime_permissionsTb4b4b4,
Tb4b4b4)Tff7b72.Td2a8ffinstallTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72def Td2a8ff_check_runtime_permissionsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72def Td2a8ff_request_runtime_permissionsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72pass
Tf0883e@property
Tff7b72def Td2a8ffadapterTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Te6edf3OptionalTb4b4b4[Ta5d6ff"Ta5d6ffandroid.bluetooth.BluetoothAdapterTa5d6ff"Tb4b4b4]Tb4b4b4:
T8b949e"""Local device Bluetooth adapter.
Could be `None` if adapter is not enabled or access to the adapter is not granted yet.
:type: `BluetoothAdapter <https://developer.android.com/reference/android/bluetooth/BluetoothAdapter>`_
`Java object <https://pyjnius.readthedocs.io/en/stable/api.html#jnius.JavaClass>`_
"""
Tf0883e@property
Tff7b72def Td2a8ffgattTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""GATT profile of the connected device
:type: BluetoothGatt Java object
"""
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_bleTff7b72.Td2a8ffgetGattTb4b4b4(Tb4b4b4)
Tf0883e@property
Tff7b72def Td2a8ffbonded_devicesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""List of Java `android.bluetooth.BluetoothDevice` objects of paired BLE devices.
:type: List[BluetoothDevice]
"""
Tff7b72return Tb4b4b4[Tb4b4b4]
Tf0883e@property
Tff7b72def Td2a8ffnameTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Name of the Bluetooth adapter.
:setter: Set name of the Bluetooth adapter
:type: Optional[str]
"""
Te6edf3adapter Tff7b72= Tff7b72selfTff7b72.Td2a8ffadapter
Tff7b72return Te6edf3adapter Tff7b72and Te6edf3adapterTff7b72.Td2a8ffgetNameTb4b4b4(Tb4b4b4)
Tf0883e@nameTff7b72.Td2a8ffsetter
Tff7b72def Td2a8ffnameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_set_nameTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72def Td2a8ff_set_nameTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffset_queue_timeoutTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3timeoutTb4b4b4)Tb4b4b4:
T8b949e"""Change the BLE operations queue timeout"""
Tff7b72selfTff7b72.Td2a8ffqueue_timeout Tff7b72= Te6edf3timeout
Tff7b72selfTff7b72.Td2a8ffqueueTff7b72.Td2a8ffset_timeoutTb4b4b4(Te6edf3timeoutTb4b4b4)
Tff7b72def Td2a8ffstart_scanTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3filtersTb4b4b4: Te6edf3OptionalTb4b4b4[Te6edf3ListTb4b4b4[Te6edf3FilterTb4b4b4]Tb4b4b4] Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3settingsTb4b4b4: Te6edf3OptionalTb4b4b4[Te6edf3ScanSettingsBuilderTb4b4b4] Tff7b72= Tff7b72NoneTb4b4b4,
Tb4b4b4)Tb4b4b4:
T8b949e"""Start a scan for devices.
The status of the scan start are reported with
:func:`scan_started <on_scan_started>` event.
:param filters: list of filters to restrict scan results.
Advertising record is considered matching the filters
if it matches any of the :class:`able.filters.Filter` in the list.
:param settings: scan settings
"""
Tff7b72pass
Tff7b72def Td2a8ffstop_scanTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Stop the ongoing scan for devices."""
Tff7b72pass
Tff7b72def Td2a8ffconnect_by_device_addressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3addressTb4b4b4: Tffa657strTb4b4b4, Te6edf3autoconnectTb4b4b4: Tffa657bool Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
T8b949e"""Connect to GATT Server of the device with a given Bluetooth hardware address, without scanning.
:param address: Bluetooth hardware address string in "XX:XX:XX:XX:XX:XX" format
:param autoconnect: If True, automatically reconnects when available.
False = direct connect (default).
:raises:
ValueError: if `address` is not a valid Bluetooth address
"""
Tff7b72pass
Tff7b72def Td2a8ffconnect_gattTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3deviceTb4b4b4, Te6edf3autoconnectTb4b4b4: Tffa657bool Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
T8b949e"""Connect to GATT Server hosted by device
:param device: BluetoothDevice Java object
:param autoconnect: If True, automatically reconnects when available.
False = direct connect (default).
"""
Tff7b72selfTff7b72.Td2a8ff_bleTff7b72.Td2a8ffconnectGattTb4b4b4(Te6edf3deviceTb4b4b4, Te6edf3autoconnectTb4b4b4)
Tff7b72def Td2a8ffclose_gattTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Close current GATT client"""
Tff7b72selfTff7b72.Td2a8ff_bleTff7b72.Td2a8ffcloseGattTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffdiscover_servicesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Discovers services offered by a remote device.
The status of the discovery reported with
:func:`services <on_services>` event.
:return: true, if the remote services discovery has been started
"""
Tff7b72return Tff7b72selfTff7b72.Td2a8ffgattTff7b72.Td2a8ffdiscoverServicesTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffenable_notificationsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4, Te6edf3enableTff7b72=Tff7b72TrueTb4b4b4, Te6edf3indicationTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
T8b949e"""Enable/disable notifications or indications for a given characteristic
:param characteristic: BluetoothGattCharacteristic Java object
:param enable: enable notifications if True, else disable notifications
:param indication: handle indications instead of notifications
:return: True, if the operation was initiated successfully
"""
Tff7b72return Tff7b72True
Tf0883e@ble_task
Tff7b72def Td2a8ffwrite_descriptorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3descriptorTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
T8b949e"""Set and write the value of a given descriptor to the associated
remote device
:param descriptor: BluetoothGattDescriptor Java object
:param value: value to write
"""
Tff7b72if Tff7b72not Te6edf3descriptorTff7b72.Td2a8ffsetValueTb4b4b4(Te6edf3force_convertible_to_java_arrayTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3LoggerTff7b72.Td2a8fferrorTb4b4b4(Ta5d6ff"Ta5d6ffError on set descriptor valueTa5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffgattTff7b72.Td2a8ffwriteDescriptorTb4b4b4(Te6edf3descriptorTb4b4b4)Tb4b4b4:
Te6edf3LoggerTff7b72.Td2a8fferrorTb4b4b4(Ta5d6ff"Ta5d6ffError on descriptor writeTa5d6ff"Tb4b4b4)
Tf0883e@ble_task
Tff7b72def Td2a8ffwrite_characteristicTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4, Te6edf3valueTb4b4b4, Te6edf3write_typeTb4b4b4: Te6edf3OptionalTb4b4b4[Te6edf3WriteTypeTb4b4b4] Tff7b72= Tff7b72None
Tb4b4b4)Tb4b4b4:
T8b949e"""Write a given characteristic value to the associated remote device
:param characteristic: BluetoothGattCharacteristic Java object
:param value: value to write
:param write_type: specific write type to set for the characteristic
"""
Tff7b72selfTff7b72.Td2a8ff_bleTff7b72.Td2a8ffwriteCharacteristicTb4b4b4(
Te6edf3characteristicTb4b4b4, Te6edf3force_convertible_to_java_arrayTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4, Tffa657intTb4b4b4(Te6edf3write_type Tff7b72or T79c0ff0Tb4b4b4)
Tb4b4b4)
Tf0883e@ble_task
Tff7b72def Td2a8ffread_characteristicTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4)Tb4b4b4:
T8b949e"""Read a given characteristic from the associated remote device
:param characteristic: BluetoothGattCharacteristic Java object
"""
Tff7b72selfTff7b72.Td2a8ff_bleTff7b72.Td2a8ffreadCharacteristicTb4b4b4(Te6edf3characteristicTb4b4b4)
Tf0883e@ble_task
Tff7b72def Td2a8ffupdate_rssiTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Triggers an update for the RSSI from the associated remote device"""
Tff7b72selfTff7b72.Td2a8ff_bleTff7b72.Td2a8ffreadRemoteRssiTb4b4b4(Tb4b4b4)
Tf0883e@ble_task
Tff7b72def Td2a8ffrequest_mtuTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3mtuTb4b4b4: Tffa657intTb4b4b4)Tb4b4b4:
T8b949e"""Request to change the ATT Maximum Transmission Unit value
:param value: new MTU size
"""
Tff7b72selfTff7b72.Td2a8ffgattTff7b72.Td2a8ffrequestMtuTb4b4b4(Te6edf3mtuTb4b4b4)
Tff7b72def Td2a8ffon_errorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3msgTb4b4b4)Tb4b4b4:
T8b949e"""Error handler
:param msg: error message
"""
Tff7b72selfTff7b72.Td2a8ff_ble Tff7b72= Te6edf3BLEErrorTb4b4b4(Te6edf3msgTb4b4b4) T8b949e# Exception for calls from another threads
Tff7b72raise Tf85149ExceptionTb4b4b4(Te6edf3msgTb4b4b4)
Tf0883e@ble_task_done
Tff7b72def Td2a8ffon_gatt_releaseTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""`gatt_release` event handler.
Event is dispatched at every read/write completed operation
"""
Tff7b72pass
Tff7b72def Td2a8ffon_scan_startedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3successTb4b4b4)Tb4b4b4:
T8b949e"""`scan_started` event handler
:param success: true, if scan was started successfully
"""
Tff7b72pass
Tff7b72def Td2a8ffon_scan_completedTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""`scan_completed` event handler"""
Tff7b72pass
Tff7b72def Td2a8ffon_deviceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3deviceTb4b4b4, Te6edf3rssiTb4b4b4, Te6edf3advertisementTb4b4b4)Tb4b4b4:
T8b949e"""`device` event handler.
Event is dispatched when device is found during a scan.
:param device: BluetoothDevice Java object
:param rssi: the RSSI value for the remote device
:param advertisement: :class:`Advertisement` data record
"""
Tff7b72pass
Tff7b72def Td2a8ffon_connection_state_changeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3statusTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4:
T8b949e"""`connection_state_change` event handler
:param status: status of the operation,
`GATT_SUCCESS` if the operation succeeds
:param state: STATE_CONNECTED or STATE_DISCONNECTED
"""
Tff7b72pass
Tff7b72def Td2a8ffon_bluetooth_adapter_state_changeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4:
T8b949e"""`bluetooth_adapter_state_change` event handler
Allows the user to detect when bluetooth adapter is turned on/off.
:param state: STATE_OFF, STATE_TURNING_OFF, STATE_ON, STATE_TURNING_ON
"""
Tff7b72def Td2a8ffon_servicesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3servicesTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
T8b949e"""`services` event handler
:param services: :class:`Services` dict filled with discovered
characteristics
(BluetoothGattCharacteristic Java objects)
:param status: status of the operation,
`GATT_SUCCESS` if the operation succeeds
"""
Tff7b72pass
Tff7b72def Td2a8ffon_characteristic_changedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4)Tb4b4b4:
T8b949e"""`characteristic_changed` event handler
:param characteristic: BluetoothGattCharacteristic Java object
"""
Tff7b72pass
Tff7b72def Td2a8ffon_characteristic_readTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
T8b949e"""`characteristic_read` event handler
:param characteristic: BluetoothGattCharacteristic Java object
:param status: status of the operation,
`GATT_SUCCESS` if the operation succeeds
"""
Tff7b72pass
Tff7b72def Td2a8ffon_characteristic_writeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3characteristicTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
T8b949e"""`characteristic_write` event handler
:param characteristic: BluetoothGattCharacteristic Java object
:param status: status of the operation,
`GATT_SUCCESS` if the operation succeeds
"""
Tff7b72pass
Tff7b72def Td2a8ffon_descriptor_readTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3descriptorTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
T8b949e"""`descriptor_read` event handler
:param descriptor: BluetoothGattDescriptor Java object
:param status: status of the operation,
`GATT_SUCCESS` if the operation succeeds
"""
Tff7b72pass
Tff7b72def Td2a8ffon_descriptor_writeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3descriptorTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
T8b949e"""`descriptor_write` event handler
:param descriptor: BluetoothGattDescriptor Java object
:param status: status of the operation,
`GATT_SUCCESS` if the operation succeeds
"""
Tff7b72pass
Tff7b72def Td2a8ffon_rssi_updatedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3rssiTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
T8b949e"""`onReadRemoteRssi` event handler.
Event is dispatched at every RSSI update completed operation,
reporting a RSSI value for a remote device connection.
:param rssi: integer containing RSSI value in dBm
:param status: status of the operation,
`GATT_SUCCESS` if the operation succeeds
"""
Tff7b72pass
Tff7b72def Td2a8ffon_mtu_changedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3mtuTb4b4b4, Te6edf3statusTb4b4b4)Tb4b4b4:
T8b949e"""`onMtuChanged` event handler
Event is dispatched when MTU for a remote device has changed,
reporting a new MTU size.
:param mtu: integer containing the new MTU size
:param status: status of the operation,
`GATT_SUCCESS` if the MTU has been changed successfully
"""
Tff7b72pass
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────